前回に続いてKVMシリーズ、今回は前回作った3個のVMとネットワークを繋ごうと思います。
今回の内容は参考サイトさまさまな内容なんだな。
最初にbr0を作る。eth0からコピればOK。
[root@take ~]# cd /etc/sysconfig/network-scripts/ [root@take network-scripts]# cp ifcfg-eth0 ifcfg-br0
eth0にブリッジを記述する。
[root@take network-scripts]# vi ifcfg-eth0 BRIDGE=br0
続いてbr0の記述だけど、ここは環境で異なるはずなのですが、TYPEとIPの記述をしていればOKの様子。
CATで見てみよう。
[root@take network-scripts]# cat ifcfg-br0 DEVICE=br0 TYPE=Bridge ONBOOT=yes NM_CONTROLLED=no BOOTPROTO=none IPADDR=192.168.44.132 PREFIX=24 GATEWAY=192.168.44.2 DNS1=192.168.44.2
次にeth0をpromiscモードにする、プロミスキャスモードの事で、何でも恋ってモード。
[root@take network-scripts]# ifconfig eth0 promisc
さて、次にブリッジ用のネットワークを立ち上げるスクリプト。これは参考サイトのものを拝借。
[root@take ~]# cat /etc/qemu-ifup #!/bin/sh echo "Executing /etc/qemu-ifup" /sbin/ifconfig $1 0.0.0.0 promisc up echo "Adding $1 to br0..." /usr/sbin/brctl addif br0 $1 sleep 3 [root@take ~]# cat /etc/qemu-ifdown #!/bin/sh /usr/sbin/brctl delif br0 $1 /sbin/ifconfig $1 down
参考サイトの方が嵌ったとこらしいのだけど、見ながらやってるたけけんも嵌ってしまった・・・。
マニュアルはちゃんと読みましょうという典型的なパターンです。
chmod 775 [root@take ~]# ll /etc/qemu-if* -rwxrwxr-x 1 root root 63 9月 16 20:22 2013 /etc/qemu-ifdown -rwxrwxr-x 1 root root 146 9月 16 20:22 2013 /etc/qemu-ifup
これで下準備は完了です。あとはオリーブオイルをかけるだけ。
前回のコマンドに付け足すのはこの部分。
-net nic,macaddr=00:00:00:00:00:01 -net tap,ifname=tap0,script=/etc/qemu-ifup -k j
もろにネットワークな記述ですなあ。
付け足してISOから起動してインストールするときはこんな感じに。
qemu-system-x86_64 -hda vm00.img -m 512 -monitor telnet::10001,server,nowait -net nic,macaddr=00:00:00:00:00:01 -net tap,ifname=tap1,script=/etc/qemu-ifup -k ja -vnc :0 -daemonize -boot d -cdrom /root/CentOS-6.4-x86_64-bin-DVD1.iso
インストールが終わって次に起動するときはCD-ROMのところは省かないと永遠にCDブートになりますので以下の部分を省略する。
-boot d -cdrom /root/CentOS-6.4-x86_64-bin-DVD1.iso
qemu-system-x86_64 -hda vm00.img -m 512 -monitor telnet::10001,server,nowait -net nic,macaddr=00:00:00:00:00:01 -net tap,ifname=tap1,script=/etc/qemu-ifup -k ja -vnc :0 -daemonize
これでVM1個は完成です。OSのインストール部分は省略しまっせ。後は好きなだけVMを追加してください。
追加するときはまたVMの作成からやろう。
[root@take ~]# qemu-img create -f qcow2 vm02.img 5G Formatting 'vm02.img', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off
複数のVMを動かす時に気を付けるところは、VNCの番号とネットワークのTAPを変えないとエラーになります。
もちろんVMのファイル名も変えないとだね。
以下はqemuのエラー。
qemu-system-x86_64: -net tap,ifname=tap0,script=/etc/qemu-ifup: could not configure /dev/net/tun (tap0): Device or resource busy qemu-system-x86_64: -net tap,ifname=tap0,script=/etc/qemu-ifup: Device 'tap' could not be initialized
VNCの方はBusyっていう表示が出て確認ができません。
コマンドで説明した方が早いのでコマンドで。以下のコマンドでOKです。
スクリプトにしてもいいかもね。
qemu-system-x86_64 -hda vm00.img -m 512 -monitor telnet::10001,server,nowait -net nic,macaddr=00:00:00:00:00:01 -net tap,ifname=tap1,script=/etc/qemu-ifup -k ja -vnc :0 -daemonize qemu-system-x86_64 -hda vm01.img -m 512 -monitor telnet::10002,server,nowait -net nic,macaddr=00:00:00:00:00:01 -net tap,ifname=tap2,script=/etc/qemu-ifup -k ja -vnc :1 -daemonize qemu-system-x86_64 -hda vm02.img -m 512 -monitor telnet::10003,server,nowait -net nic,macaddr=00:00:00:00:00:01 -net tap,ifname=tap3,script=/etc/qemu-ifup -k ja -vnc :2 -daemonize
そうそう、VMを落とす時はどうするのかというと、telnetで繋いでqします。
そのための起動オプションなのです。
[root@take ~]# telnet localhost 10001 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. QEMU 1.2.0 monitor - type 'help' for more information (qemu) q Connection closed by foreign host. [root@take ~]# telnet localhost 10002 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. QEMU 1.2.0 monitor - type 'help' for more information (qemu) q Connection closed by foreign host. [root@take ~]# telnet localhost 10003 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. QEMU 1.2.0 monitor - type 'help' for more information (qemu) q Connection closed by foreign host
ホストサーバーのifconfigはこんな感じになってました。
br0 Link encap:Ethernet HWaddr 00:0C:29:95:48:9A inet addr:192.168.44.132 Bcast:192.168.44.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe95:489a/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:39920 errors:0 dropped:0 overruns:0 frame:0 TX packets:42802 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:21985664 (20.9 MiB) TX bytes:4404942 (4.2 MiB) eth0 Link encap:Ethernet HWaddr 00:0C:29:95:48:9A inet6 addr: fe80::20c:29ff:fe95:489a/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:139141 errors:0 dropped:0 overruns:0 frame:0 TX packets:109845 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:165754333 (158.0 MiB) TX bytes:8533542 (8.1 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) tap1 Link encap:Ethernet HWaddr FE:B7:63:66:89:D8 inet6 addr: fe80::fcb7:63ff:fe66:89d8/64 Scope:Link UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:65571 errors:0 dropped:0 overruns:0 frame:0 TX packets:98957 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:4021085 (3.8 MiB) TX bytes:140992676 (134.4 MiB) tap2 Link encap:Ethernet HWaddr 0A:89:08:6D:D7:F1 inet6 addr: fe80::889:8ff:fe6d:d7f1/64 Scope:Link UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:162 errors:0 dropped:0 overruns:0 frame:0 TX packets:1402 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:18553 (18.1 KiB) TX bytes:1401122 (1.3 MiB) tap3 Link encap:Ethernet HWaddr 76:60:5D:B8:9E:1F inet6 addr: fe80::7460:5dff:feb8:9e1f/64 Scope:Link UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:298 errors:0 dropped:0 overruns:0 frame:0 TX packets:1417 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:29906 (29.2 KiB) TX bytes:1139641 (1.0 MiB)
これですべてのサーバーにSSHログインが可能になりました。
[root@take ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c2995489a no eth0 tap1 tap2 tap3
ちなみにこれをプライベートクラウドと言います。嘘です。
ある意味あってるかも?
でもこのままだとホストサーバーからゲストサーバーの管理ができないじゃん。って気づいている方も多いかも。
肝心なことです。
ちゃんとできるようで、virshというコマンドがあります。でもこれはまた今度。
まだ知らないって書いた方が正しいかなw
[root@take ~]# yum search libvirt Loaded plugins: downloadonly, fastestmirror, security Loading mirror speeds from cached hostfile * sl: ftp.scientificlinux.org * sl-security: ftp.scientificlinux.org * sl6x: ftp.scientificlinux.org * sl6x-security: ftp.scientificlinux.org ========================================= N/S Matched: libvirt ========================================= fence-virtd-libvirt.x86_64 : Libvirt backend for fence-virtd fence-virtd-libvirt-qpid.x86_64 : Libvirt-qmf backend for fence-virtd libvirt-cim.i686 : A CIM provider for libvirt libvirt-cim.x86_64 : A CIM provider for libvirt libvirt-client.i686 : Client side library and utilities of the libvirt library libvirt-client.x86_64 : Client side library and utilities of the libvirt library libvirt-devel.i686 : Libraries, includes, etc. to compile with the libvirt library libvirt-devel.x86_64 : Libraries, includes, etc. to compile with the libvirt library libvirt-java.noarch : Java bindings for the libvirt virtualization API libvirt-java-devel.noarch : Compressed Java source files for libvirt-java libvirt-java-javadoc.noarch : Java documentation for libvirt-java libvirt-python.x86_64 : Python bindings for the libvirt library libvirt-snmp.x86_64 : SNMP functionality for libvirt ocaml-libvirt.x86_64 : OCaml binding for libvirt ocaml-libvirt-devel.x86_64 : Development files for ocaml-libvirt fence-virtd-checkpoint.x86_64 : Cluster+Libvirt backend for fence-virtd libvirt.x86_64 : Library providing a simple virtualization API libvirt-lock-sanlock.x86_64 : Sanlock lock manager plugin for QEMU driver perl-Sys-Virt.x86_64 : Represent and manage a libvirt hypervisor connection
参考サイト
CentOS6.0、Windows、その他備忘録 KVMのネットワーク設定
さくらインターネット研究所 KVMを使う(ネットワーク設定編)